package com.weihui.jxc.view;

import java.lang.reflect.Method;
import java.util.Vector;

import javax.swing.table.AbstractTableModel;

import com.weihui.jxc.common.ErrorManager;
import com.weihui.jxc.model.Customer;
import com.weihui.jxc.model.Provider;
/**
 * 自定义表格数据模板，类似于android中的adapter
 * @author xiaowei
 *
 */
public class MyTableModel<T> extends AbstractTableModel{
    private Vector<T> data = new Vector<T>();//数据源，这里数据支持Vector
    private String[] columnNames;//表格中的标题栏文字
    private Class<T> cls;//实例
    public MyTableModel(String[] columnNames,Class<T> cls) {
		super();
		this.columnNames = columnNames;
		this.cls = cls;
	}

	/**
     * 生成的列的数量
     */
	@Override
	public int getColumnCount() {
		// TODO Auto-generated method stub
		return columnNames.length;
	}
    /**
     * 生成的行的数量
     */
	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return data.size();
	}
	/**
	 * 获取对应列的列名
	 */
    @Override
    public String getColumnName(int column) {
    	// TODO Auto-generated method stub
    	return columnNames[column];
    }
    /**
     * 获取对应列对应行的数据
     */
	@Override
	public Object getValueAt(int row, int col) {
		T c = data.get(row);//一行就是一个对象(对应行的信息)
		try {
			//通过反射拿到“getView()”方法
			Method method = cls.getMethod("getValue", Integer.class);//方法及方法参数类型
			method.setAccessible(true);
			return method.invoke(c, col);
		} catch (Exception e) {
			ErrorManager.printError("MyTableModel getValueAt()", e);
		}
		return null;
		
	}
	/**
	 * 设置表格是否可编辑
	 */
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		// TODO Auto-generated method stub
		return false;
	}
	/**
	 * 每一列对应的类
	 */
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// TODO Auto-generated method stub
		return getValueAt(0, columnIndex).getClass();
	}
	/**
	 * 自定义，用来更新数据的方法
	 * @param customers
	 */
	public void updateData(Vector<T> data) {
		this.data = data;//更新数据
		if(data.size()==0) {
			data = new Vector<T>();
		}else {
			//自动填充数据到表格
			fireTableRowsInserted(0, data.size()-1);
		}
	}
	
}